﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text.RegularExpressions;
using Logger;
using System.Configuration;

namespace _4rumDCT.App_Code
{
    public class Common
    {
        public Common()
        {
            //
            // TODO: Add constructor logic here
            //
        }

        public const string sPathUpLienKet = "http://qltb.dct.vn";
        public const string sPathUpAnhDaiDien = "~/Upload/AnhDaiDien";

        public static string GetNgayThang(object Char)
        {
            DateTime NgayChiDinh = DateTime.ParseExact(Common.StandardString(Convert.ToDateTime(Char).ToString("dd/MM/yyyy")), "dd/MM/yyyy", null);

            DateTime NgayCN = new DateTime(Common.GetServerDateTime().Year, Common.GetServerDateTime().Month, Common.GetServerDateTime().Day);
            TimeSpan s = NgayCN.Subtract(NgayChiDinh);
            if (s.TotalDays > 5)
            {
                return "";
            }
            else
            {
                //return "<img src='http://" + HttpContext.Current.Request.Url.Host + "/images/newnew.gif" + "' title=\"Tin mới\" />";
                return "~/images/newnew.gif";
            }
        }

        public static string GetImageDisplay(object Char)
        {
            DateTime NgayChiDinh = DateTime.ParseExact(Common.StandardString(Convert.ToDateTime(Char).ToString("dd/MM/yyyy")), "dd/MM/yyyy", null);

            DateTime NgayCN = new DateTime(Common.GetServerDateTime().Year, Common.GetServerDateTime().Month, Common.GetServerDateTime().Day);
            TimeSpan s = NgayCN.Subtract(NgayChiDinh);
            if (s.TotalDays > 5)
            {
                return "display:none";
            }
            else
            {
                //return "<img src='http://" + HttpContext.Current.Request.Url.Host + "/images/newnew.gif" + "' title=\"Tin mới\" />";
                return "display:inline";
            }
        }

        /// <summary>
        /// Get các tham số người dùng sau khi login
        /// Input: sKey("Id","TenTruyCap","HoTen")
        /// Output: Giá trị của khóa sKey trong HttpContext.Current.User.Identity
        /// </summary>
        public static string GetKeyUserInfo(string sKey)
        {
            if (HttpContext.Current.User.Identity.Name.Trim().Length == 0) return string.Empty;
            string[] UserInfo = HttpContext.Current.User.Identity.Name.Split(';');
            if (sKey.Equals("Id")) return UserInfo.GetValue(0).ToString();
            if (sKey.Equals("TenTruyCap")) return UserInfo.GetValue(1).ToString();
            if (sKey.Equals("HoTen")) return UserInfo.GetValue(2).ToString();
            return string.Empty;
        }

        /// <summary>
        /// Chuẩn hóa chuỗi dữ liệu khi người dùng input
        /// Input: sContent (chuỗi cần chuẩn hóa)
        /// Output: Chuỗi sau khi replace các ký tự đặc biệt
        /// </summary>
        public static string StandardString(string sContent)
        {
            sContent = sContent.Trim();

            sContent = sContent.Replace("<td>", "");
            sContent = sContent.Replace("</td>", "");
            sContent = sContent.Replace("<tr>", "");
            sContent = sContent.Replace("</tr>", "");
            sContent = sContent.Replace("<table>", "");
            sContent = sContent.Replace("</table>", "");
            sContent = sContent.Replace("<script", "");
            sContent = sContent.Replace("</script>", "");

            sContent = sContent.Replace("OR", "");
            sContent = sContent.Replace("ALTER", "");
            sContent = sContent.Replace("DROP", "");
            return sContent;
        }

        /// <summary>
        /// Đọc khóa thiết lập nằm trong thẻ <appSetting></appSetting> trong Web.config
        /// Input: sKeyApp (tên khóa thiết lập)
        /// Output: Giá trị tương ứng với khóa thiết lập
        /// </summary>
        public static string ReadAppSetting(string sKeyApp)
        {
            return ConfigurationManager.AppSettings[sKeyApp];
        }

        /// <summary>
        /// Ghi log lỗi và quy trình
        /// Input: sPage(Tên của trang cần Log), string sFunction(Tên của hàm cần Log), string sMessage(Nội dung Log)
        /// </summary>
        public static void WriteLog(string sPage, string sFunction, string sMessage)
        {
            try
            {
                string LogPath = HttpContext.Current.Server.MapPath("~/LogInfo");
                if (!System.IO.Directory.Exists(LogPath))
                {
                    System.IO.Directory.CreateDirectory(LogPath);
                }
                CLogger TestLogger = new CLogger();
                TestLogger.Initialize(LogPath, "DCTEDU.log", 2);
                TestLogger.LogInformation(sPage, sFunction, sMessage);
                TestLogger.Terminate();
            }
            catch (Exception)
            {
            }
        }

        /// <summary>
        /// Mã hóa chuỗi thành chuỗi MD5
        /// Input: sToEncrypt (Chuỗi cần mã hóa)
        /// Output: Chuỗi sau khi mã hóa
        /// </summary>
        public static string EncryptMD5(string sToEncrypt)
        {
            System.Text.UTF8Encoding ue = new System.Text.UTF8Encoding();
            byte[] bytes = ue.GetBytes(sToEncrypt);

            // encrypt bytes
            System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
            byte[] hashBytes = md5.ComputeHash(bytes);

            // Convert the encrypted bytes back to a string (base 16)
            string hashString = "";

            for (int i = 0; i < hashBytes.Length; i++)
            {
                hashString += Convert.ToString(hashBytes[i], 16).PadLeft(2, '0');
            }

            return hashString.PadLeft(32, '0');
        }

        /// <summary>
        /// Get Ngày giờ server
        /// Output: Ngày giờ được lấy tại Server
        /// </summary>
        public static DateTime GetServerDateTime()
        {
            return DateTime.Now.ToUniversalTime().AddHours(7);
        }

        public static string GenerateID(int MinSize, int MaxSize)
        {

            string stRefID = String.Empty;

            Random random = new Random();

            int iChosenMaxSize = random.Next(MinSize, MaxSize);


            for (int x = 1; x <= iChosenMaxSize; x++)
            {

                int iCharType = random.Next(1, 3);


                switch (iCharType)
                {

                    case 1:
                        {

                            stRefID += char.ConvertFromUtf32(random.Next(48, 57));

                            break;

                        }

                    case 2:
                        {

                            stRefID += char.ConvertFromUtf32(random.Next(65, 90));

                            break;

                        }

                    case 3:
                        {

                            stRefID += char.ConvertFromUtf32(random.Next(97, 122));

                            break;

                        }

                }



                System.Threading.Thread.Sleep(1);

            }
            return stRefID;

        }

        public static int RandomNumber(int min, int max)
        {
            Random random = new Random();
            return random.Next(min, max);
        }

        public static bool IsNumber(string pText)
        {
            Regex regex = new Regex(@"^[-+]?[0-9]*\.?[0-9]+$");
            return regex.IsMatch(pText);
        }

        /// <summary>
        /// Sử dụng để Convert Chữ Số Có Dấu sang Số Không Dấu có gạch ở giữa(Dùng ASCII)
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        public static string ConvertToUnSign(string text)
        {

            for (int i = 33; i < 48; i++)
            {

                text = text.Replace(((char)i).ToString(), "");

            }



            for (int i = 58; i < 65; i++)
            {

                text = text.Replace(((char)i).ToString(), "");

            }



            for (int i = 91; i < 97; i++)
            {

                text = text.Replace(((char)i).ToString(), "");

            }

            for (int i = 123; i < 127; i++)
            {

                text = text.Replace(((char)i).ToString(), "");

            }

            text = text.Replace(" ", "-");
            text = text.Replace("\"", "'");
            Regex regex = new Regex(@"\p{IsCombiningDiacriticalMarks}+");

            string strFormD = text.Normalize(System.Text.NormalizationForm.FormD);

            return regex.Replace(strFormD, String.Empty).Replace('\u0111', 'd').Replace('\u0110', 'D');

        }

        public static string StandardStringlink(string sContent)
        {
            sContent = sContent.Trim();
            sContent = sContent.Replace("~", ".");
            return sContent;
        }

        /// <summary>
        /// Chuẩn hóa chuỗi dữ liệu khi người dùng input
        /// Input: sContent (chuỗi cần chuẩn hóa)
        /// Output: Chuỗi sau khi replace các ký tự đặc biệt
        /// </summary>
        public static string StandardStringjquery(string sContent)
        {
            sContent = sContent.Trim();
            sContent = sContent.Replace("/", "-");
            return sContent;
        }

        public static bool checkDateTime(DateTime? dt)
        {
            if (dt == null || dt.ToString() == "1/1/1950 12:00:00 AM")
                return false;
            else
            {
                return true;
            }
        }

        public static string thayTheChuoiNgay(string sContent)
        {
            sContent = sContent.Trim();
            string chuoiTong = "";
            string[] arrayStr2 = sContent.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
            string[] arrayStr3 = arrayStr2[0].Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
            string arrayStr4 = "";
            //string[] arrayStr = arrayStr2[0].Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
            if (Convert.ToInt32(arrayStr3[1]) > 11)
            {
                //hoanVi(Convert.ToInt32(arrayStr3[0]), Convert.ToInt32(arrayStr3[1]));
                arrayStr4 = arrayStr3[1] + "/" + arrayStr3[0] + "/" + arrayStr3[2];
            }
            else
            {
                arrayStr4 = arrayStr2[0];
            }
            string[] arrayStr = arrayStr4.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
            for (int i = 0; i < arrayStr.Length - 1; i++)
            {
                string chuoile = arrayStr[i];
                if (arrayStr[i].Length == 1)
                {
                    chuoile = "0" + arrayStr[i];
                }
                chuoiTong += chuoile + "/";
            }
            chuoiTong += arrayStr[2];
            return chuoiTong;
        }
    }
}